package ar.edu.utn.frba.dds.aterrizar.aerolineas;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import com.oceanic.AsientoDTO;

import ar.edu.utn.frba.dds.aterrizar.busquedas.Vuelo;
import ar.edu.utn.frba.dds.aterrizar.criterioDeOrden.CriterioDeOrden;
import ar.edu.utn.frba.dds.aterrizar.domain.fechas.ComparadorDeFechas;
import ar.edu.utn.frba.dds.aterrizar.domain.fechas.ConversorDeFormato;
import ar.edu.utn.frba.dds.aterrizar.domain.fechas.Latinoamericano;

public class OperadorDeAerolineas {
	
	private static final OperadorDeAerolineas INSTANCE = new OperadorDeAerolineas();

	public static OperadorDeAerolineas getInstance() {
		return INSTANCE;
	}

	public ArrayList<Vuelo> getVuelosComoArray(String[][] vuelos, AerolineaLanchitaAdapter aerolinea) {
		ArrayList<Vuelo> aux = new ArrayList<Vuelo>();
		for(String[] unVuelo : vuelos){
			aux.add(aerolinea.crearVuelo(unVuelo));
		}
		return aux;
	}
	
	public ArrayList<Vuelo> getVuelosComoArray(ArrayList<AsientoDTO> vuelos, AerolineaOceanicAdapter aerolinea) {
		ArrayList<Vuelo> aux = new ArrayList<Vuelo>();
		for(AsientoDTO unVuelo : vuelos){
			aux.add(aerolinea.crearVuelo(unVuelo));
		}
		return aux;
	}
	
	
	public void ordenar(List<Vuelo> vuelos, CriterioDeOrden criterio) {
		Collections.sort(vuelos, criterio);
	}

	public int getDuracionDeVueloEnMinutos(Vuelo vuelo) {
		ConversorDeFormato conversor = new ConversorDeFormato();
		conversor.agregarFormato(new Latinoamericano());
		Date fechaPartida = conversor.convertirFecha(vuelo.getFechaSalida());
		Date fechaLlegada = conversor.convertirFecha(vuelo.getFechaLlegada());
		ComparadorDeFechas comparador = new ComparadorDeFechas();
		int cantidadDeDias = comparador.diferenciaEntre(fechaPartida, fechaLlegada);
		return comparador.diferenciaEntreHorasEnMinutos(vuelo.getHorarioSalida(), vuelo.getHorarioLlegada(), cantidadDeDias);
	}

	public String expresarMinutosEnStringHora(int minutosAConvertir) {
		ConversorDeFormato conversor = new ConversorDeFormato();
		return conversor.convertirMinutosEnStringHora(minutosAConvertir);
	}
	
}
